package thread;

import java.util.concurrent.Semaphore;

/**
 * @Description: Semaphore 的用法
 * @Project: testDemo
 * @Author: hjibo
 * @CreateDate: 2019/2/21 15:12
 * @ModificationHistory: （who whatTime doWhat）
 */
public class ThreadShit implements Runnable {

    // 2 表示只有两个坑位
    // false 表示不用根据等待顺序获取坑位，谁抢到是谁的
    private static final Semaphore semaphore = new Semaphore(2,false);

    private String name;

    public ThreadShit(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        try {
            // 获取许可（查看有没有空的坑位）
            // 这个一个阻塞方法，加入没有获取到许可，线程会一直阻塞在这里直到获取到许可为止
            semaphore.acquire();
            System.out.println(this.name+" 终于挤进了厕所，霸占了坑位，脸上露出了喜悦的笑容！");
            Thread.sleep(3000);
            System.out.println(this.name+" 拉完屎，轻松走出了厕所！");
            // 释放许可（坑位用完了，归还坑位）
            semaphore.release();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
